Ubuntu 14.04编译Android 2.3.7源代码记录

编译环境

下载源代码

下载源代码

Android 2.3.7r1 源码,原本按照谷歌官方的指导,需要下载repo同步AOSP,但是遇到太多问题,并且.repo 文件相当大,下载耗时太久,而且很容易出现问题,而且所以直接下载别人打包好的7z格式高压缩比源码包。

为什么使用低版本的2.3.7

因为随着Android版本的不断更新,AOSP源代码越来越庞大,需要占据大量硬盘空间,同时对机器的性能提出了更高的要求,如果仅做学习研究的话,低版本的安卓就够了。

安装所需环境

安装JDK 1.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 ./jdk-6u45-linux-x64.bin
sudo cp -r jdk1.6.0_45 /usr/local
sudo gedit /etc/profile

添加以下内容
export JAVA_HOME=/usr/local/jdk1.6.0_45
export JRE_HOME=/usr/local/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

注销系统,查看jdk是否安装成功

java -version
javac -version

安装较低版本的gcc-4.4,g++-4.4

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo apt-get install gcc-4.4
sudo apt-get install gcc-4.4-multilib
sudo apt-get install g++-4.4
sudo apt-get install g++-4.4-multilib

sudo rm -rf /usr/bin/gcc
sudo rm -rf /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.4 gcc
sudo ln -s /usr/bin/g++-4.4 g++

查看是否安装成功
g++ -v
gcc -v

安装所需的软件包

1
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

开始编译

执行命令

1
2
3
4
make clobber
source build/envsetup.sh
lunch generic-eng
make -j4

等待约50分钟左右,编译完成,中间可能遇到不少错误,基本上都可以google到解决方案。

这里写图片描述

运行

如果编译顺利,执行

1
emulator

会启动一个模拟器,并将编译好的系统镜像 加载安装并运行到模拟器上。

这里写图片描述

遇到的错误及解决办法

  1. Can't locate Switch.pm

    原因:缺少相关库
    解决:安装缺失的库

    1
    sudo apt-get install libswitch-perl
  2. make:out/host/linux-x86/obj/SHARED_LIBRARIES/libdvm_intermediates/native/dalvik_system_Zygote.o Error 1

    原因:缺少头文件。
    解决:添加头文件#include <sys/resource.h>到以下文件dalvik/vm/native/dalvik_system_Zygote.c

    1
    sudo gedit dalvik/vm/native/dalvik_system_Zygote.c
  3. make:[out/host/linux-x86/obj/STATIC_LIBRARIES/libext4_utils_intermediates/output_file.o] Error 1

    原因:系统的文件换了位置。
    解决: 此时需要将 /usr/include/x86_64-linux-gnu/zconfig.h拷贝到上级目录,此时编译才通过将 zconfig.h拷贝到/usr/include/ 目录即可

    1
    2
    cd /usr/include/x86_64-linux-gnu/
    sudo cp zconfig.h ../
  4. out/target/common/obj/APPS/SignatureTest_intermediates/genres.stamp Killed

    原因:给虚拟机设定的内存太小,仅1G。
    解决:将内存增大到4G 后解决。

  5. SDL init failure, reason is: No available video device

    原因:缺少SDL库支持。
    解决方法:添加库。

    1
    2
    3
    sudo apt-add-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner"    
    sudo apt-get update
    sudo apt-get install libsdl1.2debian:i386
坚持原创技术分享,您的支持将鼓励我继续创作!